package com.wst.system.server.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.wst.system.server.entity.enm.SysFilePermission;
import com.wst.system.server.service.SysFileService;
import com.wst.system.util.FileUtils;
import com.wst.system.util.SpringContextUtils;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import lombok.Data;

/**
 * <p>
 * 文件表
 * </p>
 *
 * @author X.I.O
 * @since 2025-02-27
 */

@Data
@ApiModel(description = "文件表")
@TableName("sys_file")
public class SysFile extends DataBase implements  Serializable {

    private static final long serialVersionUID = 1L;

                /**
             * 主键id
             */
    @TableId(value="id", type= IdType.AUTO)
    @ApiModelProperty(value = "主键id")
    private Integer id;
            /**
             * 文件名称
             */
    @ApiModelProperty(value = "文件名称")
    private String fileName;
            /**
             * 文件路径
             */
    @ApiModelProperty(value = "文件路径")
    private String filePath;
            /**
             * 文件uuid
             */
    @ApiModelProperty(value = "文件uuid")
    private String fileUuid;
            /**
             * 文件类型
             */
    @ApiModelProperty(value = "文件类型")
    private String fileType;
            /**
             * 文件权限
             */
    @TableField(value = "file_permission")
    @ApiModelProperty(value = "文件权限")
    private String filePermission;
            /**
             * 文件所属用户
             */
    @ApiModelProperty(value = "文件所属用户")
    private String fileUid;
            /**
             * 文件大小
             */
    @ApiModelProperty(value = "文件大小")
    private String fileSize;
            /**
             * 上传时间
             */
    @ApiModelProperty(value = "上传时间")
    private Date uploadTime;
            /**
             * 关联表
             */
    @ApiModelProperty(value = "关联表")
    private String tableName;
            /**
             * 关联字段
             */
    @TableField("table_fieldId")
    @ApiModelProperty(value = "关联字段")
    private String tableFieldid;
            /**
             * 关联id
             */
    @ApiModelProperty(value = "关联id")
    private String bindId;
            /**
             * 文件md5值
             */
    @ApiModelProperty(value = "文件md5值")
    private String fileMd5;
            /**
             * 文件sha256值
             */
    @ApiModelProperty(value = "文件sha256值")
    private String fileSha256;


    private Integer isEncrypt;

    private String code;

    private String groupId;

    @TableField(exist = false)
    private String groupName;

    @TableField(exist = false)
    private String tempUrl;

    @TableField(exist = false)
    private String filePermissionName;

    @TableField(exist = false)
    private String fileSizeStr;

    public String getFileSizeStr() {
        return FileUtils.formatFileSize(Long.parseLong(fileSize));
    }

    public String getTempUrl() {
        if(this.getFilePermission().equals(SysFilePermission.PUBLIC.getPermissionCode().toString())){
            SysFileService sysFileService=SpringContextUtils.getBean(SysFileService.class);
            try {
                return sysFileService.getSysFileUrl(this,null);
            }catch (Exception e) {
            }
        }else {
            return "非公开文件, 无法生成";
        }
        return tempUrl;
    }

    public String getFilePermissionName() {
        if(this.getFilePermission()!=null){
            SysFilePermission[] sysFilePermissions = SysFilePermission.values();
            for (SysFilePermission sysFilePermission : sysFilePermissions) {
                if (String.valueOf(sysFilePermission.getPermissionCode()).equals(filePermission)) {
                    return sysFilePermission.getPermissionName();
                }
            }
        }
        return "暂无权限";
    }
}